/******************************************************************************
 * \brief	演示在C语言中调用汇编函数和汇编宏定义函数
 * \details	使用Keil Simulator模拟器，和Debug时的Logic Analyzer示波器窗口查看输出
 * \remark	File format: UTF-8，源文件使用UTF-8中文编码
 * \note	工程里包含了汇编文件的话，还需要自己手写Boot代码，或者创建工程时添加Keil默认的Boot代码
 * \author	将狼才鲸
 * \date	2024-07-23
 ******************************************************************************/

/********************************* 头文件 *************************************/
#include <Atmel/at89c51RC2.h>

/******************************** 类型定义 ************************************/
typedef unsigned char		uint8;
typedef unsigned int		uint16;
typedef unsigned long int	uint32;
typedef char				int8;
typedef int					int16;
typedef long int			int32;

/********************************* 宏定义 *************************************/
/** 错误码 */
#define	OK			0
#define ERR			(-1)	/* 通用的错误码 */
#define ERR_PARAM	(-2)	/* 传入的参数错误 */

/****************************** 结构体定义*************************************/
typedef enum _BOOL {
	FALSE = 0,
	TRUE		/* TRUE = 1 */
} BOOL;

/******************************* 函数声明 *************************************/
extern void delay_us_10x(uint8 cnt);
extern void delay_ms(uint16 cnt);

/* 如果是在一个汇编文件中调用另一个汇编文件里的函数，采用 EXTRN CODE (YOUR_FUNCTION_NAME) 的方式进行声明 */

/******************************* 接口函数 *************************************/
/**
 * \brief	主函数
 * \details	当整个工程文件中没有汇编文件时，Debug后默认进入到main函数第一行，
 *			但当有汇编文件时，默认会先进入到汇编，此时则需要写好boot
 */
int main(void)
{
	P1_0 = 0;
	P1_0 = 1;

	while (1)
	{
		/**
		 请在Debug后通过 View--Analysis Windows--Logic Analyzer--Setup--点击右上角叉叉左边的新建图标--键入P1_0--Close 来创建模拟器中示波器的采样引脚；
		 把示波器的小窗口向下拉一点，露出波形的显示区域；
		 再点击Zoom中的All来显示整个波形（不点击会看不到变化的波形）；
		 再F10单步运行，一边运行一边看输出的矩形波。
		 */
		P1_0 = 0;			/* IO口输出低；P1_0是头文件中已经定义的寄存器Bit */
		delay_us_10x(200);	/* 调用汇编函数延时2000us */
		P1_0 = 1;			/* IO口输出高 */
		delay_ms(8);		/* 调用汇编函数延时8ms */
	}
}

/********************************* 文件尾 *************************************/
